package cn.lili.modules.payment.kit.plugin.bank;

import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.payment.entity.RefundLog;
import cn.lili.modules.payment.kit.Payment;
import cn.lili.modules.payment.kit.dto.PayParam;
import cn.lili.modules.payment.kit.dto.PaymentSuccessParams;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import cn.lili.modules.payment.kit.params.dto.CashierParam;
import cn.lili.modules.payment.service.PaymentService;
import cn.lili.modules.payment.service.RefundLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 线下收款
 *
 * @author Chopper
 * @version v1.0 2021-02-20 10:14
 */
@Slf4j
@Component
public class BankTransferPlugin implements Payment {
	/**
	 * 退款日志
	 */
	@Autowired
	private RefundLogService refundLogService;
	/**
	 * 支付日志
	 */
	@Autowired
	private PaymentService paymentService;

	@Override
	public void refund(RefundLog refundLog) {
		try {
			refundLog.setIsRefund(true);
			refundLogService.save(refundLog);
		} catch (Exception e) {
			log.error("线下收款错误", e);
		}
	}

	/**
	 * 支付订单
	 *
	 * @param order
	 *            订单
	 */
	public void callBack(Order order) {

		// 收银参数
		CashierParam cashierParam = new CashierParam();
		cashierParam.setPrice(order.getFlowPrice());
		// 支付参数
		PayParam payParam = new PayParam();
		payParam.setOrderType("ORDER");
		payParam.setSn(order.getSn());
		payParam.setClientType(ClientTypeEnum.PC.name());

		PaymentSuccessParams paymentSuccessParams = new PaymentSuccessParams(PaymentMethodEnum.BANK_TRANSFER.name(), "",
				order.getFlowPrice(), payParam);

		// 记录支付日志
		paymentService.adminPaySuccess(paymentSuccessParams);
		log.info("支付回调通知：线上支付：{}", payParam);
	}

}
